﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Chapter12
{
    /// <summary>
    /// 第12章 泛型
    /// </summary>
    public class Program
    {
        public static void Main(string[] args)
        {
            #region 01 泛型的概念
            Code01.Demo.Begin();
            #endregion

            #region 02 使用泛型
            /*
             * 01 可空类型
             * 01.01 运算符和可空类型
             * 当运算表达式中有一个或两个值为null时，结果为null，解释为不计算
             * 对于bool?可空类型的操作结果如下
             * op1      op2         op1 & op2   op1 | op2
             * true     true        true        true
             * true     false       flase       true
             * true     null        null        true
             * false    true        false       true
             * false    false       false       false
             * false    null        false       null
             * null     true        null        true
             * null     false       false       null
             * null     null        null        null
             * 01.02 ??运算符
             * 02 System.Collections.Generic 名称空间
             * 02.01 List<T>
             * 02.02 对泛型列表进行排序和搜索
             * 02.03 Dictionary<K,V>
             * 02.04 修改CardLib以便使用泛型集合类
             * */
            Code02.Code01.Demo.Begin();
            Code02.Code01.Example01.Demo.Begin();
            Code02.Code02.Demo.Begin();
            Code02.Code02.Example02.Demo.Begin();
            Code02.Code02.Example03.Demo.Begin();
            #endregion

            #region 03 定义泛型类型
            /*
             * 01 定义泛型类
             * 01.01 default关键字
             * 01.02 约束类型
             * 可用约束
             * struct
             * class
             * baseclass
             * interface
             * new()
             * where T2 : T1 裸类型约束
             * 01.03 从泛型类中继承
             * 01.04 泛型运算符
             * 01.05 泛型结构
             * 02 定义泛型接口
             * 03 定义泛型方法
             * 04 定义泛型委托
             * */
            Code03.Code01.Snippet07.Demo.Begin();
            Code03.Code01.Example04.Demo.Begin();
            Code03.Code01.Snippet12.Demo.Begin();
            Code03.Code03.Demo.Begin();
            #endregion

            #region 04 变体
            /*
             * 01 协变
             * 02 抗变
             * */
            Code04.Demo.Begin();
            #endregion

            #region 05 小结
            #endregion

            #region 06 练习
            Code06.Demo.Begin();
            #endregion

            #region 07 本章要点
            #endregion
        }
    }
}

